home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2011 May / PC Advisor 190 E.iso / pc / ESSENTIALS / VLC Media Player 1.1 / vlc-1.1.5-win32.exe / sdk / include / vlc / plugins / vlc_stream.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-11-13  |  6.1 KB  |  204 lines

  1. /*****************************************************************************
  2.  * vlc_stream.h: Stream (between access and demux) descriptor and methods
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 the VideoLAN team
  5.  * $Id: 1d499890c3f69355966afccc066f5bbd74065d30 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_STREAM_H
  25. #define VLC_STREAM_H 1
  26.  
  27. #include <vlc_block.h>
  28.  
  29. /**
  30.  * \file
  31.  * This file defines structures and functions for stream (between access and demux) descriptor in vlc
  32.  */
  33.  
  34. # ifdef __cplusplus
  35. extern "C" {
  36. # endif
  37.  
  38. /**
  39.  * \defgroup stream Stream
  40.  *
  41.  *  This will allow you to easily handle read/seek in demuxer modules.
  42.  * @{
  43.  */
  44.  
  45. /* Opaque definition for text reader context */
  46. typedef struct stream_text_t stream_text_t;
  47.  
  48. /**
  49.  * stream_t definition
  50.  */
  51.  
  52. struct stream_t
  53. {
  54.     VLC_COMMON_MEMBERS
  55.     bool        b_error;
  56.  
  57.     /* Module properties for stream filter */
  58.     module_t    *p_module;
  59.  
  60.     /* Real or virtual path (it can only be changed during stream_t opening) */
  61.     char        *psz_path;
  62.  
  63.     /* Stream source for stream filter */
  64.     stream_t *p_source;
  65.  
  66.     /* */
  67.     int      (*pf_read)   ( stream_t *, void *p_read, unsigned int i_read );
  68.     int      (*pf_peek)   ( stream_t *, const uint8_t **pp_peek, unsigned int i_peek );
  69.     int      (*pf_control)( stream_t *, int i_query, va_list );
  70.  
  71.     /* */
  72.     void     (*pf_destroy)( stream_t *);
  73.  
  74.     /* Private data for module */
  75.     stream_sys_t *p_sys;
  76.  
  77.     /* Text reader state */
  78.     stream_text_t *p_text;
  79.  
  80.     /* Weak link to parent input */
  81.     input_thread_t *p_input;
  82. };
  83.  
  84. /**
  85.  * Possible commands to send to stream_Control() and stream_vaControl()
  86.  */
  87. enum stream_query_e
  88. {
  89.     /* capabilities */
  90.     STREAM_CAN_SEEK,            /**< arg1= bool *   res=cannot fail*/
  91.     STREAM_CAN_FASTSEEK,        /**< arg1= bool *   res=cannot fail*/
  92.  
  93.     /* */
  94.     STREAM_SET_POSITION,        /**< arg1= uint64_t       res=can fail  */
  95.     STREAM_GET_POSITION,        /**< arg1= uint64_t *     res=cannot fail*/
  96.  
  97.     STREAM_GET_SIZE,            /**< arg1= uint64_t *     res=cannot fail (0 if no sense)*/
  98.  
  99.     /* Special for direct access control from demuxer.
  100.      * XXX: avoid using it by all means */
  101.     STREAM_CONTROL_ACCESS,  /* arg1= int i_access_query, args   res: can fail
  102.                              if access unreachable or access control answer */
  103.  
  104.     /* You should update size of source if any and then update size 
  105.      * FIXME find a way to avoid it */
  106.     STREAM_UPDATE_SIZE,
  107.  
  108.     /* */
  109.     STREAM_GET_CONTENT_TYPE,    /**< arg1= char **         res=can fail */
  110.  
  111.     /* XXX only data read through stream_Read/Block will be recorded */
  112.     STREAM_SET_RECORD_STATE,     /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true)  res=can fail */
  113. };
  114.  
  115. VLC_EXPORT( int, stream_Read, ( stream_t *s, void *p_read, int i_read ) );
  116. VLC_EXPORT( int, stream_Peek, ( stream_t *s, const uint8_t **pp_peek, int i_peek ) );
  117. VLC_EXPORT( int, stream_vaControl, ( stream_t *s, int i_query, va_list args ) );
  118. VLC_EXPORT( void, stream_Delete, ( stream_t *s ) );
  119. VLC_EXPORT( int, stream_Control, ( stream_t *s, int i_query, ... ) );
  120. VLC_EXPORT( block_t *, stream_Block, ( stream_t *s, int i_size ) );
  121. VLC_EXPORT( char *, stream_ReadLine, ( stream_t * ) );
  122.  
  123. /**
  124.  * Get the current position in a stream
  125.  */
  126. static inline int64_t stream_Tell( stream_t *s )
  127. {
  128.     uint64_t i_pos;
  129.     stream_Control( s, STREAM_GET_POSITION, &i_pos );
  130.     if( i_pos >> 62 )
  131.         return (int64_t)1 << 62;
  132.     return i_pos;
  133. }
  134.  
  135. /**
  136.  * Get the size of the stream.
  137.  */
  138. static inline int64_t stream_Size( stream_t *s )
  139. {
  140.     uint64_t i_pos;
  141.     stream_Control( s, STREAM_GET_SIZE, &i_pos );
  142.     if( i_pos >> 62 )
  143.         return (int64_t)1 << 62;
  144.     return i_pos;
  145. }
  146.  
  147. static inline int stream_Seek( stream_t *s, uint64_t i_pos )
  148. {
  149.     return stream_Control( s, STREAM_SET_POSITION, i_pos );
  150. }
  151.  
  152. /**
  153.  * Get the Content-Type of a stream, or NULL if unknown.
  154.  * Result must be free()'d.
  155.  */
  156. static inline char *stream_ContentType( stream_t *s )
  157. {
  158.     char *res;
  159.     if( stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) )
  160.         return NULL;
  161.     return res;
  162. }
  163.  
  164. /**
  165.  * Create a special stream and a demuxer, this allows chaining demuxers
  166.  * You must delete it using stream_Delete.
  167.  */
  168. VLC_EXPORT( stream_t *, stream_DemuxNew, ( demux_t *p_demux, const char *psz_demux, es_out_t *out ) );
  169.  
  170. /**
  171.  * Send data to a stream_t handle created by stream_DemuxNew.
  172.  */
  173. VLC_EXPORT( void,      stream_DemuxSend,  ( stream_t *s, block_t *p_block ) );
  174.  
  175. /**
  176.  * Create a stream_t reading from memory.
  177.  * You must delete it using stream_Delete.
  178.  */
  179. VLC_EXPORT( stream_t *, stream_MemoryNew, (vlc_object_t *p_obj, uint8_t *p_buffer, uint64_t i_size, bool b_preserve_memory ) );
  180. #define stream_MemoryNew( a, b, c, d ) stream_MemoryNew( VLC_OBJECT(a), b, c, d )
  181.  
  182. /**
  183.  * Create a stream_t reading from an URL.
  184.  * You must delete it using stream_Delete.
  185.  */
  186. VLC_EXPORT( stream_t *, stream_UrlNew, (vlc_object_t *p_this, const char *psz_url ) );
  187. #define stream_UrlNew( a, b ) stream_UrlNew( VLC_OBJECT(a), b )
  188.  
  189.  
  190. /**
  191.  * Try to add a stream filter to an open stream.
  192.  * @return New stream to use, or NULL if the filter could not be added.
  193.  **/
  194. VLC_EXPORT( stream_t*, stream_FilterNew, ( stream_t *p_source, const char *psz_stream_filter ) );
  195. /**
  196.  * @}
  197.  */
  198.  
  199. # ifdef __cplusplus
  200. }
  201. # endif
  202.  
  203. #endif
  204.